home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Extensions / img / Lib / img.py next >
Encoding:
Python Source  |  2000-06-23  |  2.5 KB  |  112 lines

  1. """Easy-to-use wrapper module to read and write images in any format,
  2. using any incore representation
  3. """
  4.  
  5. ##import addpack
  6. ##addpack.addpack('/ufs/jack/src/python_mods/img')
  7. import imghdr
  8. import imgconvert
  9. import string
  10. import os
  11.  
  12. from imgconvert import setquality, settrace
  13.  
  14. from imgformat import error
  15. unsupported_error = imgconvert.unsupported_error
  16.  
  17. # This function is here so freeze imports all the needed modules:
  18. def _dummy_freeze_func():
  19.     import imgsgi
  20.     import imggif
  21.     import imgpgm
  22.     import imgppm
  23.     import imgpbm
  24.     import imgtiff
  25.     import imgjpeg
  26.     import imgbmp
  27.     import imgxbm
  28.     import imgpng
  29.  
  30. class _FileDict:
  31.     __fmtdict = {
  32.         'rgb': 'imgsgi',
  33.         'gif': 'imggif',
  34.         'pgm': 'imgpgm',
  35.         'ppm': 'imgppm',
  36.         'pbm': 'imgpbm',
  37.         'tiff': 'imgtiff',
  38.         'tif': 'imgtiff',
  39.         'jpeg': 'imgjpeg',
  40.         'jpg': 'imgjpeg',
  41.         'bmp': 'imgbmp',
  42.         'xbm': 'imgxbm',
  43.         'png': 'imgpng'
  44.         }
  45.     has_key = __fmtdict.has_key
  46.     keys = __fmtdict.keys
  47.  
  48.     def __init__(self):
  49.         self.__cache = {}
  50.  
  51.     def __getitem__(self, key):
  52.         try:
  53.             return self.__cache[key]
  54.         except KeyError:
  55.             pass
  56.         module = self.__fmtdict[key]
  57.         try:
  58.             exec 'import %s' % module
  59.         except ImportError:
  60.             raise error, 'No support for image file type: '+key
  61.         module = eval(module)
  62.         self.__cache[key] = module
  63.         return module
  64. filedict = _FileDict()
  65.  
  66. def reader(fmt, file, ignoreext=0):
  67.     """Read any imagefile into any in-core format.
  68.     The imagefile is examined to determine what it is.
  69.     Args: format, filename or open file"""
  70.     
  71.     filetype = None
  72.     if type(file) == type(''):
  73.         if not ignoreext:
  74.             # Guess filetype from extension
  75.             root, ext = os.path.splitext(file)
  76.             if ext:
  77.                 ext = ext[1:]
  78.             if filedict.has_key(ext):
  79.                 filetype = ext
  80.         file = open(file, 'rb')
  81.     if not filetype:    
  82.         filetype = imghdr.what(file)
  83.         if not filetype:
  84.             raise error, 'Unknown image file type (bad magic number)'
  85.     if not filedict.has_key(filetype):
  86.         raise error, 'No support for image file type: '+filetype
  87.     module = filedict[filetype]
  88.     rdr = module.reader(file)
  89.     if fmt == None:
  90.         return rdr
  91.     else:
  92.         return imgconvert.stackreader(fmt, rdr)
  93.  
  94. def writer(fmt, filename):
  95.     """Write any format imagefile (decided from the extension) from
  96.     any in-core format picture.
  97.     Args: format, filename"""
  98.     
  99.     root, ext = os.path.splitext(filename)
  100.     if ext:
  101.         ext = ext[1:]
  102.     if not filedict.has_key(ext):
  103.         raise error, 'No support for image file type: '+ext
  104.     module = filedict[ext]
  105.     wrr = module.writer(filename)
  106.     if fmt == None:
  107.         return wrr
  108.     else:
  109.         return imgconvert.stackwriter(fmt, wrr)
  110.     
  111.     
  112.